package sao.controlador;

import java.io.IOException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import sao.dao.Dao;
import sao.modelo.Agendamento;
import sao.modelo.Usuario;

/**
 * Servlet implementation class RelatorioProprioController2
 */
public class RelatorioProprioController2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// Verifica autenticação do usuário
		HttpSession sessao = request.getSession(false);
		if (sessao == null) {
			despachaUsuario(request, response, "login.jsp");
		}
		
		// Verifica permissão do usuário
		Usuario usuario = (Usuario) sessao.getAttribute("usuario");
		if (!(usuario.getPerfil().isOperacaoValida("relatorioProprio.do"))) {
			despachaUsuarioPaginaErro(request, response, "ERRO: Você não tem permissão para efetuar esta operação!");
		}
		
		// Captura a data de início da pesquisa
		String dataInicio = request.getParameter("calendar");
		
		Dao dao = new Dao();
		
		try {
			
			if (dataInicio != null) {
				DateFormat f = new SimpleDateFormat("dd-MM-yyyy");
				Date dtInicio = f.parse(dataInicio);
				DateFormat f2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				
				List<Agendamento> agendamentos = dao.getAgendamentosPorPeriodoPorPaciente(
						usuario.getCodigo(), f2.format(dtInicio));
				request.setAttribute("dataInicio", dataInicio);
				request.setAttribute("agendamentos", agendamentos);
				request.setAttribute("numeroAgendamentos", agendamentos.size());
				despachaUsuario(request, response, "relatorioProprioResultado.jsp");
			} else {

			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}//FIM método doPost
	
	
	/**
	 * Envia o usuário a alguma página, dependendo se sua autenticação
	 * foi ou não aceita
	 * @param request
	 * @param response
	 * @param pagina
	 */
	private void despachaUsuario(HttpServletRequest request,
			HttpServletResponse response, String pagina) {
		RequestDispatcher view = request.getRequestDispatcher(pagina);
		try {
			view.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}//FIM método despachaUsuario
	
	
	/**
	 * Envia o usuário a página de erro padrão com alguma mensagem
	 * @param request
	 * @param response
	 * @param mensagemErro - Uma mensagem de erro a ser exibida ao usuário
	 */
	private void despachaUsuarioPaginaErro(HttpServletRequest request,
			HttpServletResponse response, String mensagemErro) {
		request.setAttribute("mensagemErro", mensagemErro);
		RequestDispatcher view = request.getRequestDispatcher("erro.jsp");
		try {
			view.forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}//FIM método despachaUsuario

	
}
